#ifndef _MYLOG_H_
#define _MYLOG_H_
#include "logger.hpp"
namespace mylog
{
typedef __mylog::LoggerBuilder LoggerBuilder;
typedef __mylog::UserLoggerBuilder UserLoggerBuilder;
typedef __mylog::Logger Logger;
typedef __mylog::Level Level;
typedef __mylog::Sinker Sinker;
typedef __mylog::ConsoleSinker ConsoleSinker;
typedef __mylog::FileSinker FileSinker;
typedef __mylog::ColorConsoleSinker ColorConsoleSinker;

/*根据日志器名称获取日志器*/
Logger::ptr getLogger(const std::string &name)
{
    return __mylog::LoggerManager::getInstance().get(name);
}
/*检查日志器是否存在*/
bool haveLogger(const std::string& name)
{
    return __mylog::LoggerManager::getInstance().exists(name);
}
/*获取默认日志器*/
Logger::ptr defaultLogger()
{
    return __mylog::LoggerManager::getInstance().defaultLogger();
}

/*使用指定日志器进行输出（省略文件名与行号）*/
#define dlog(fmt, ...) debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define ilog(fmt, ...) info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define wlog(fmt, ...) warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define elog(fmt, ...) error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define flog(fmt, ...) fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

/*使用默认日志器进行输出（省略文件名与行号）*/
#define DLOG(fmt, ...) defaultLogger()->dlog(fmt, ##__VA_ARGS__)
#define ILOG(fmt, ...) defaultLogger()->ilog(fmt, ##__VA_ARGS__)
#define WLOG(fmt, ...) defaultLogger()->wlog(fmt, ##__VA_ARGS__)
#define ELOG(fmt, ...) defaultLogger()->elog(fmt, ##__VA_ARGS__)
#define FLOG(fmt, ...) defaultLogger()->flog(fmt, ##__VA_ARGS__)
} // namespace mylog

#endif